rendernode: Don't leak mem_surface
authorTimm Bäder <mail@baedert.org>
Tue, 10 Oct 2017 07:07:34 +0000 (09:07 +0200)
committerTimm Bäder <mail@baedert.org>
Tue, 10 Oct 2017 07:49:35 +0000 (09:49 +0200)
gsk/gskrendernodeimpl.c

index 13fbd0024bb63e5dbb408c6c2035b62a7464775b..b3a6e2455ff8c0997353fa7d5b3cd3b60dfb0eb1 100644 (file)
@@ -1749,6 +1749,7 @@ gsk_cairo_node_serialize (GskRenderNode *node)
       int width, height;
       int stride, i;
       guchar *mem_surface, *data;
+      GVariant *result;
 
       width = cairo_image_surface_get_width (self->surface);
       height = cairo_image_surface_get_height (self->surface);
@@ -1760,17 +1761,18 @@ gsk_cairo_node_serialize (GskRenderNode *node)
       for (i = 0; i < height; i++)
         memcpy (mem_surface + i * width * 4, data + i * stride, width * 4);
 
-      return g_variant_new ("(dddduu@au)",
-                            (double) node->bounds.origin.x, (double) node->bounds.origin.y,
-                            (double) node->bounds.size.width, (double) node->bounds.size.height,
-                            (guint32) width,
-                            (guint32) height,
-                            g_variant_new_fixed_array (G_VARIANT_TYPE ("u"),
-                                                       mem_surface,
-                                                       width * height,
-                                                       sizeof (guint32)));
-
+      result = g_variant_new ("(dddduu@au)",
+                             (double) node->bounds.origin.x, (double) node->bounds.origin.y,
+                             (double) node->bounds.size.width, (double) node->bounds.size.height,
+                             (guint32) width,
+                             (guint32) height,
+                             g_variant_new_fixed_array (G_VARIANT_TYPE ("u"),
+                                                        mem_surface,
+                                                        width * height,
+                                                        sizeof (guint32)));
       g_free (mem_surface);
+
+      return result;
     }
 }